跳到主要内容

4.5 音频输出模块

(1)介绍与准备

在该ESP32开发平台上,音频输出有3.5MM的耳机接口和喇叭。经过模拟开关RS 2101后,输出音频信号到3.5MM的耳机接口,再通过NCP2890音频功率放大器将信号放大到喇叭。

RS 2101运算放大器是一种低通阻、单极双掷(SPDT)模拟开关,当IN引脚输入高电平的时候,NO引脚导通到COM引脚,ESP32的IO17输出信号到耳机接口和喇叭;

当IN引脚输入低电平的时候,NC引脚导通到COM引脚,FM模块输出的信号到耳机接口和喇叭;

由于ESP32的IO引脚默认为低电平,所有默认为FM模块的信号直接输出到耳机接口。

NCP2890音频功率放大器的1号引脚(SHUTDOWN)上施加高电平时,音频信号输出到喇叭上,当为低电平时,器件进入关断模式,信号无法通过音频功率放大器到喇叭输出音频。

下面我们来完成按不同的按键,发出不同的音频。

alt text

图4.5.1

alt text

图4.5.2

(2)实验代码

//按键引脚配置
int button1Pin = 1;
int button2Pin = 2;
int button3Pin = 3;
int button4Pin = 6;

void setup() {
//按键的引脚配置为输出模式为输入上拉,
pinMode(button1Pin, INPUT_PULLUP);
pinMode(button2Pin, INPUT_PULLUP);
pinMode(button3Pin, INPUT_PULLUP);
pinMode(button4Pin, INPUT_PULLUP);

//引脚配置为输出模式,41号引脚控制喇叭的开关,42号引脚控制模拟开关的选择,
//高电平为ESP32的Io输出,低电平为FM模块的输出,默认为低电平
pinMode(41, OUTPUT);
pinMode(42, OUTPUT);
}

uint8_t modelsign = 2; //设置选择输出喇叭还是耳机的方式

void loop() {
selectDevice(modelsign);//选择输出模式

int Value1 = digitalRead(button1Pin); //读取按键1引脚的值
int Value2 = digitalRead(button2Pin); //读取按键2引脚的值
int Value3 = digitalRead(button3Pin); //读取按键3引脚的值
int Value4 = digitalRead(button4Pin); //读取按键4引脚的值

if (Value1 == LOW) { //判断键值1是否等于0,执行下面的程序
delay(100);//软件消抖
if (Value1 == LOW) {
analogWrite(17, 100);
delay(200);
}
}

if (Value2 == LOW) { //判断键值2是否等于0,执行下面的程序
delay(100);//软件消抖
if (Value2 == LOW) {
analogWrite(17, 50);
delay(500);
}
}

if (Value3 == LOW) { //判断键值3是否等于0,执行下面的程序
delay(100);//软件消抖
if (Value3 == LOW) {
analogWrite(17, 150);
delay(500);
}
}

if (Value4 == LOW) { //判断键值4是否等于0,执行下面的程序
delay(100);//软件消抖
if (Value4 == LOW) {
analogWrite(17, 30);
delay(1500);
}
}
}

//模式切换
void selectDevice(uint8_t dev) {
if (dev == 0) {//喇叭关闭,选择FM输出
digitalWrite(41, LOW);
digitalWrite(42, LOW);
}
if (dev == 1) {//喇叭关闭,选择esp32GPIO输出
digitalWrite(41, LOW);
digitalWrite(42, HIGH);
}
if (dev == 2) {//喇叭打开,选择esp32GPIO输出
digitalWrite(41, HIGH);
digitalWrite(42, HIGH);
}
}

(3)实验讲解

表1.5 音频输出模块函数讲解
函数说明
analogWrite()将一个模拟数值写进ESP32引脚
digitalWrite()将数字引脚写HIGH(高电平)或LOW(低电平)
digitalRead()读取数字引脚的 HIGH(高电平)或 LOW(低电平)

(4)实验现象

编译上传代码后,按不同的按键发出不同的声音。